package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

import java.io.*;
import java.util.ArrayList;

/*
    库管类
        优化方案: 使用集合容器替换数组容器
 */
public class OtherStudentDao1 implements BaseStudentDao{

    //1. 创建一个集合,用来充当数据仓库
    private static ArrayList<Student> stuArray = new ArrayList<Student>();

    //通过静态代码块的设计让系统在加载StudentDao.class的时候自动执行静态代码块代码，初始化两个学生对象到数组容器中
    static {
        //创建字符输入流
        try {
            FileReader fr = new FileReader("itheima-edu-info-manager\\stu.txt");
            char [] chs = new char[1024];
            int len;
            StringBuilder sb = new StringBuilder();
            while ((len = fr.read(chs)) != -1){
        sb.append(new String(chs,0,len));
            }
            String stuStr = sb.toString();

            String[] split = stuStr.split(System.lineSeparator());

            for (int i = 0; i < split.length; i++) {
                String[] stuMsgArray = split[i].split(",");
                Student stu = new Student(stuMsgArray[0],stuMsgArray[1],stuMsgArray[2],stuMsgArray[3]);
                stuArray.add(stu);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    //添加学生
    public boolean addStudent(Student stu) {
        boolean add = stuArray.add(stu);
        reSave();
        return add;
    }

    //查询所有学生对象并返回
    public Student[] findAllStudent() {
        //1. 定义一个数组,用来返回集合中的数据
        return stuArray.toArray(new Student[stuArray.size()]);
    }

    //删除学生
    public void deleteStudent(String delId) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(delId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.remove(index);
        reSave();
    }

    //修改学生
    public void updateStudent(String updateId, Student stu) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(updateId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.set(index,stu);
        reSave();
    }

    //获取指定学号在数组中的索引位置
    public int getIndex(String updateId) {
        // 1.1 先假设delId在数组中不存在
        int index = -1;

        //1.2 遍历数组容器
        for (int i = 0; i < stuArray.size(); i++) {
            //1.3 获取当前索引位置的元素
            Student stu = stuArray.get(i);
            //1.4 将stu的id和delId进行匹配
            if (stu != null && stu.getSid().equals(updateId)){
                index = i;
                break;
            }
        }
        return index;
    }

    private void reSave(){
        try {
            FileWriter fw = new FileWriter("itheima-edu-info-manager\\stu.txt");
            for (Student student : stuArray) {
                String s = student.toString();
                fw.write(s);
                fw.write(System.lineSeparator());
                fw.flush();
            }
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
